package com.betterjr.modules.account.service;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.betterjr.common.utils.BTAssert;
import com.betterjr.common.utils.Collections3;
import com.betterjr.common.utils.QueryTermBuilder;
import com.betterjr.common.utils.UserUtils;
import com.betterjr.modules.account.entity.CustOperatorInfo;
import com.betterjr.modules.account.entity.CustOperatorInfoExtend;
import com.betterjr.modules.cert.entity.CustCertInfo;
import com.betterjr.modules.cert.entity.CustCertRule;
import com.betterjr.modules.cert.service.CustCertService;
import com.betterjr.modules.operator.service.SysOperatorRoleRelationService;
import com.betterjr.modules.role.entity.Role;

/**
 * 
 * @ClassName: CustOperatorInfoExtendService 
 * @Description: 扩展操作员
 * @author xuyp
 * @date 2017年11月27日 下午2:14:00 
 *
 */
@Service
public class CustOperatorInfoExtendService {

    @Autowired
    private SysOperatorRoleRelationService roleRelationService;

    @Autowired
    private CustCertService certService;

    /**
     * 
     * @Title: findCurrentUserInfo 
     * @Description: 查询当前用户信息 
     * @return CustOperatorInfoExtend
     * @throws 
     * @author xuyp
     * @date 2017年11月27日 上午11:59:28
     */
    public CustOperatorInfoExtend findCurrentUserInfo() {

        final CustOperatorInfo info = UserUtils.getOperatorInfo();
        BTAssert.notNull(info, "数据为空,请先登录");

        final CustOperatorInfoExtend extend = new CustOperatorInfoExtend(info);

        // 设置角色列表
        final List<Role> roleList = roleRelationService.findRoleByOperId(info.getId());
        extend.setRoleType(findRoleType(roleList));

        // 设置企业列表
        final CustCertInfo certInfo = certService.findCertByOperOrg(info.getOperOrg());
        if (null != certInfo) {
            extend.setCompanyType(findCompanyType(certInfo.getCertRuleList()));
        }
        return extend;
    }

    /**
     * 
     * @Title: findCompanyType 
     * @Description: 设置公司类别 
     * @param certRuleList
     * @return 
     * @throws 
     * @author xuyp
     * @date 2017年11月27日 下午12:00:05
     */
    private String findCompanyType(List<CustCertRule> certRuleList) {

        if (Collections3.isEmpty(certRuleList)) {
            return "";
        }
        final StringBuilder sb = new StringBuilder();
        final Map<String, String> map = createCompanyMap();
        for (final CustCertRule custCertRule : certRuleList) {
            if (map.containsKey(custCertRule.getRule())) {

                sb.append(map.get(custCertRule.getRule())).append(",");
            }
        }

        if (sb != null && sb.length() > 1) {
            return sb.substring(0, sb.length() - 1);
        }

        return sb.toString();

    }

    /**
     *  核心企业CORE_USER                0
     * 保理公司FACTOR_USER              1
     * 前海拜特平台PLATFORM_USER          2
     * 经销商客户SELLER_USER             3
     * 供应商客户SUPPLIER_USER           4
     * @Title: createCompanyMap 
     * @Description: 创建一个存放企业角色 的map
     * @return 
     * @throws 
     * @author xuyp
     * @date 2017年11月27日 上午11:52:29
     */
    @SuppressWarnings("unchecked")
    private Map<String, String> createCompanyMap() {

        final Map<String, String> map = QueryTermBuilder.newInstance().put("CORE_USER", "0").put("FACTOR_USER", "1")
                .put("PLATFORM_USER", "2").put("SELLER_USER", "3").put("SUPPLIER_USER", "4").build();

        return map;

    }

    /**
     * 
     * @Title: findRoleType 
     * @Description:返回角色列表的前端显示格式
     * @param roleList
     * @return 
     * @throws 
     * @author xuyp
     * @date 2017年11月27日 上午11:50:36
     */
    private String findRoleType(List<Role> roleList) {

        if (Collections3.isEmpty(roleList)) {
            return "";
        }

        final StringBuilder sb = new StringBuilder();

        final Map<String, String> roleMap = createRoleMap();
        for (final Role role : roleList) {
            if (roleMap.containsKey(role.getRoleType())) {

                sb.append(roleMap.get(role.getRoleType())).append(",");
            }
        }

        if (sb != null && sb.length() > 1) {
            return sb.substring(0, sb.length() - 1);
        }

        return sb.toString();

    }

    /**
     * 
     * @Title: createRoleMap 
     * @Description:创建一个map对象，用来角色对应关系
     * @return 
     * 0:经办员  OPERATOR_USER
     * 1:复核员  OPERATOR_CHECKER
     * 2:审批员  OPERATOR_ADUIT
     * 3:管理员 OPERATOR_ADMIN
     * @throws 
     * @author xuyp
     * @date 2017年11月27日 上午11:49:50
     */
    @SuppressWarnings("unchecked")
    private Map<String, String> createRoleMap() {

        final Map<String, String> map = QueryTermBuilder.newInstance().put("OPERATOR_USER", "0")
                .put("OPERATOR_CHECKER", "1").put("OPERATOR_ADUIT", "2").put("OPERATOR_ADMIN", "3").put("0", "0")
                .put("1", "1").put("2", "2").put("3", "3").build();

        return map;

    }

}
